CFnをServerless FrameworkからDeploy
terminal.iconaws cloudformation create-stack ではなくてterminal.iconsls deploy しませんか?tsawada.icon
この分割機能が胸熱なのだtsawada.iconmharuta.icon
この手のフレームワークのデファクトスタンダード……とまで言うと言いすぎかもしれませんが、この手のフレームワークにしては非常に「枯れて」いて、機能も充実しています。
枯れた技術であることって超大事tsawada.icon 1. terminal.iconsls deployしたcurrent directoryの serverless.ymlをみにいく
2. 関連するファイルも全て一度参照する
3. 1~2を見て合成したtemplateを./.serveless配下に~~.json 形式で保存する
ここで作業を止めたい場合はterminal.iconsls packageすると良い
4. 3で保存したtemplateを(あらかじめserverless frameworkで作成した)S3 bucketに保存する
作成されたS3 Bucketは同一のStackで管理されているよtsawada.icon
5. 保存されたtemplateを使って、CloudFormationを実行する
Tipsは全てこちらに貯めていこう
同じtemplate内で「先に作成されたAWS resource」の情報を参照するときに使う
serveless.ymlの書き方と、それぞれの意味合い
code:serverless.yml
name: aws
stage: ${opt:stage, self:custom.defaultStage}
region: ${opt:region, self:custom.defaultRegion}
custom:
defaultStage: dev #sls deploy時に --stage で指定しなくても大丈夫なように defaultRegion: ap-northeast-1 #sls deploy時に --region で指定しなくても大丈夫なように accountId:
dev: 604985511858
stg: 384253122252
prod: 326773496668
branchName:
dev: source
stg: develop
prod: master
resources:
プラスして、検証してみたこと
customをenvにするとNGtsawada.icon
no indent部分はservice, provider,custom,resources と決まっているみたい
${file(~~)}で指定するときは、同一行に-または(key名):の記載が必要tsawada.icon
これもNGでる
resources:直下には- ${file(~~)}いくつおいても良いtsawada.icon
fileの中では以下のような構成
code:./cloudformation/chatbot.yml
Resources:
ChatbotIAMRole:
~~~
ChatbotIAMRoleTwo:
~~~
ChatbotIAMRoleThree:
~~~
ここら辺めっちゃ検証したwtsawada.icon
resources:ではなくResources:直下に- ${file(~~)}で並べるのはNG
Resources:直下はkey : valueがズラーっと並んで欲しいのに、なぜか配列表記になる。
code:もとの.yml
Resources:
- ${file(./cloudformation/ChatbotIAMRole.yml)}
- ${file(./cloudformation/ChatbotIAMRoleTwo.yml)}
- ${file(./cloudformation/ChatbotIAMRoleThree.yml)}
code:本当は欲しい.yml
Resources:
ChatbotIAMRole:
~~~
ChatbotIAMRoleTwo:
~~~
ChatbotIAMRoleThree:
~~~
code:こうなっちゃう.yml
Resources:
- ChatbotIAMRole:
~~~
- ChatbotIAMRoleTwo:
~~~
- ChatbotIAMRoleThree:
~~~
結果として、tsawada.iconは以下の書き方にしている
code:結論.yml
Resources:
ChatbotIAMRole: ${file(./cloudformation/ChatbotIAMRole.yml)}
ChatbotIAMRoleTwo: ${file(./cloudformation/ChatbotIAMRoleTwo.yml)}
ChatbotIAMRoleThree: ${file(./cloudformation/ChatbotIAMRoleThree.yml)}